package com.edusite
import com.edusite.Logbook



class PersonasController {
 

    static allowedMethods = [save: "POST", update: "POST", delete: "POST"]

    def index = {
        redirect(action: "list", params: params)
    }

    def list = {
    if (session.user.tipo != "admin"){
           println session.user.tipo
    	   redirect(uri:"/")
    	}
        params.max = Math.min(params.max ? params.int('max') : 10, 100)
        [personasInstanceList: Personas.list(params), personasInstanceTotal: Personas.count()]
    }

    def create = {
    if (session.user.tipo != "admin")
    	redirect(uri:"/")
    	
        def personasInstance = new Personas()
        personasInstance.properties = params
        return [personasInstance: personasInstance]
    }
    def createAdmin = {
        def personasInstance = new Personas()
        personasInstance.properties = params
        return [personasInstance: personasInstance]
    }
    def createAlumno = {
        def personasInstance = new Personas()
        personasInstance.properties = params
        return [personasInstance: personasInstance]
    }



    def save = {
        def personasInstance = new Personas(params)
        if (personasInstance.save(flush: true)) {
            flash.message = "${message(code: 'default.created.message', args: [message(code: 'personas.label', default: 'Personas'), personasInstance.id])}"
            redirect(action: "show", id: personasInstance.id)
        }
        else {
            render(view: "create", model: [personasInstance: personasInstance])
        }
    }


    def show = {
        if (session.user.tipo != "admin" && session.user.id != params.id)
    	    redirect(uri:"/home/indice")       

        def personasInstance = Personas.get(params.id)
        if (!personasInstance) {
            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'personas.label', default: 'Personas'), params.id])}"
            redirect(action: "list")
        }
        else {
            [personasInstance: personasInstance]
        }
    }

    def edit = {
        def personasInstance = Personas.get(params.id)
        if (!personasInstance) {
            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'personas.label', default: 'Personas'), params.id])}"
            redirect(action: "list")
        }
        else {
            return [personasInstance: personasInstance]
        }
    }

    def update = {
        def personasInstance = Personas.get(params.id)
        if (personasInstance) {
            if (params.version) {
                def version = params.version.toLong()
                if (personasInstance.version > version) {
                    
                    personasInstance.errors.rejectValue("version", "default.optimistic.locking.failure", [message(code: 'personas.label', default: 'Personas')] as Object[], "Another user has updated this Personas while you were editing")
                    render(view: "edit", model: [personasInstance: personasInstance])
                    return
                }
            }
            personasInstance.properties = params
            if (!personasInstance.hasErrors() && personasInstance.save(flush: true)) {
                flash.message = "${message(code: 'default.updated.message', args: [message(code: 'personas.label', default: 'Personas'), personasInstance.id])}"
                redirect(action: "show", id: personasInstance.id)
            }
            else {
                render(view: "edit", model: [personasInstance: personasInstance])
            }
        }
        else {
            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'personas.label', default: 'Personas'), params.id])}"
            redirect(action: "list")
        }
    }

    def delete = {
        def personasInstance = Personas.get(params.id)
        if (personasInstance) {
            try {
                personasInstance.delete(flush: true)
                flash.message = "${message(code: 'default.deleted.message', args: [message(code: 'personas.label', default: 'Personas'), params.id])}"
                redirect(action: "list")
            }
            catch (org.springframework.dao.DataIntegrityViolationException e) {
                flash.message = "${message(code: 'default.not.deleted.message', args: [message(code: 'personas.label', default: 'Personas'), params.id])}"
                redirect(action: "show", id: params.id)
            }
        }
        else {
            flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'personas.label', default: 'Personas'), params.id])}"
            redirect(action: "list")
        }
    }
    
     def loginBarra={
	Personas miusuario= Personas.findByUsuarioAndPassword(params.usuario, params.password)
	
	if (!miusuario) {
	    flash.message="Usuario o password incorrecto: ${params.usuario}"
	    redirect(action:'login')
	  
	    }
	else {   
	    
	    session.user= miusuario
//	    session.id = usuario.id
// Empiezo con el logbook
	    def milogbook = new Logbook(
	    person:miusuario,
	    entrada:new Date(),
	    salida:new Date(),
	    tarea:"login",
	    )
	    
	    if (milogbook.save())
	    session.log=milogbook
	    def fechahoy = new Date()
	    def maquina = System.getenv("COMPUTERNAME")
	    def operativo = System.getProperty("os.name")
	    def nusuario = System.getProperty("user.name")
               sendMail {
                 to "josemar1992@gmail.com"
                 subject "Entorno Educativo, envio de información"
                 html "Buenos dias Urcalanda.<br> <strong>${nusuario}</strong> se ha logueado en la aplicación<br> <strong>${maquina}</strong> es su ordenador<br>Utilizando <strong>${operativo}</strong> <br> ${fechahoy} version 0.2.0 modificado apellidos"
            } 
	    
	    
//	    redirect(uri:"/")
		if (miusuario.tipo == "admin"){
//		   session.user.tipo= "Admin"
	    	   redirect(uri:"/home/indice")
	    	   }
	    	else if (miusuario.tipo == "profesor"){
	    	   redirect(uri:"/profesores/indice")
	    	   }
	    	
	    	else {
	    	   redirect(uri:"/alumnos/indice")
	    	   }

	    	    
		}
	 }
	 
/*      def handleLogin={

	def usuario= Personas.findByUsuario(params.nombre)
	if (!usuario) {
	    flash.message="Usuario no dado de alta: ${params.nombre}"
	    redirect(action:'login')
	  
	    }
	else {   
	    if (usuario.password == params.password) {
	    session.user= usuario
	    redirect(controller:"alumnos", action:"show", id:5)
	    }
	    else {
	    flash.message="Usuario o password incorrecto"
	    redirect(action:'login')
	    }
	    
		}
	 }        
*/
	def login = {
	}

       def logout= {
      	 if (session.user){
      	 session.user=null
	}
	if (session.log){
	session.log=null
	}

//      	 session.tipo=null
//      	 redirect (action:'personas.loginBarra')

      	 redirect (uri:"/")
      	 
  //    	 redirect (action:'loginBarra')
      }
      
      def recupera={
      def random = new Random()
      100.times {
           def next =random.nextInt(50) + 25
           assert next > 24
           assert next < 76
           }
       def chars = []
       ['A'..'Z','a'..'z','0'..'9'].each {chars += it}
       def password = (1..8).collect {chars [random.nextInt(chars.size())]}.join()
       
     def npersona= Personas.findByDni(params.dni)
     if (npersona) {
        def solicitud ="nuevo password"
        npersona.password=password
        if (npersona.save()) {

           sendMail {
              to npersona.correoe
              subject "Entorno Educativo, envio de información"
              body (view:"/personas/enviopassword",
              model:[npersona:npersona, solicitud:solicitud])
          }
      
          flash.message="Se ha enviado a tu dirección de correo electrónico tu nombre de usuario y un nuevo password"
             }
          }
          else {
          flash.message="Los datos introducidos no son correctos"
          }
      redirect (uri:"/")
      
      }
      def showPassword = {}
      def showPassProfe = {}
      
      def nuevoPassword = {
      
      if (params.npassword== params.npassword2) {
      def comprueba = Personas.findByUsuarioAndPassword(session.user.usuario, params.password)
         if (comprueba){
         comprueba.password=params.npassword
           if (comprueba.save()){
               def solicitud ="cambio de password"
               sendMail {
                    to comprueba.correoe
                    subject "Entorno Educativo, envio de información"
                    body (view:"/personas/enviopassword",
                    model:[npersona:comprueba, solicitud:solicitud])
          }

              flash.message ="Se ha cambiado el password, revise su cuenta de correo electrónico"
            }
         }
         else
         {
         println"no existe el usuario, avisar al usuario ¿?¿?"

         flash.message = "Existen errores en los passwords o bien puede que no tenga permisos para realizar esta operacion"
         }
      }
      else
      {
         println " no coinciden los passwords"
         flash.message = "Existen errores en los passwords"


      }
      
              redirect (uri:"/home/indice")      
      }
      
 }
